package com.ck.lock.synchronize;


import com.ck.lock.common.Counter;

/**
 * @author ck
 * @date 2023/7/3 16:26
 */
public class SynchronizedDemoTest {

    /**
     * synchronized(不公平) 修饰方法
     * 特性：可重入，可见性
     * 缺点：效率比较低，不够灵活，不可中断，无法感知获取锁的状态
     *
     *  1. 修饰一个代码块，被修饰的代码块称为同步语句块，其作用的范围是大括号{}括起来的代码，作用的对象是调用这个代码块的对象；
     *  2. 修饰一个方法，被修饰的方法称为同步方法，其作用的范围是整个方法，作用的对象是调用这个方法的对象；
     *  3. 修饰一个静态的方法，其作用的范围是整个静态方法，作用的对象是这个类的所有对象，类对象；
     *  4. 修饰一个类，其作用的范围是synchronized后面括号括起来的部分，作用主的对象是这个类的所有对象。
     */


    public static void main(String[] args) throws InterruptedException {
        System.out.println("目标结果是：100000");
        Counter counter=new Counter();

        //线程t1让count成员自增到5w
        Thread t1=new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                counter.increaseForSynchronized();
            }

        });
        t1.start();

        //线程t2让count成员自增到5w
        Thread t2=new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                counter.increaseForSynchronized();
            }
        });
        t2.start();

        //等待两个线程都结束
        t1.join();
        t2.join();
        System.out.println("多线程处理下："+counter.getCount());
    }

}
